const express = require('express');
const router = express.Router();
const config = require('./../config/index');
const axios = require('axios');
const QRcode = require('qrcode');
const { getRandomString, getSign, getXml, getJs } = require('./../utils/tools');

router.get('/', function (req, res, next) {
    res.send('支付')
});
/**
* @api {post} /api/pay/qrcode 获取二维码图片
* @apiName PostApiPayParams
* @apiGroup Pay
* 
* @apiParam { String } out_trade_no 生成订单的时间唯一标识（time）
* @apiParam { Number } price 商品价格
* @apiParam { String } info 商品信息
* 
* @apiSuccessExample { json } Success-Response:
        res.send({
            code: '200',
            message: '获取二维码图片'
        })
* @apiSampleRequest /api/pay/qrcode
* @apiVersion 0.0.0
*/
router.post('/qrcode', function (req, res, next) {
    // 接收前端发送的参数：商品订单号、商品描述信息、商品金额
    const { out_trade_no, body, total_fee} = req.body
    let _prepay = {
        appid: config.appid, // 公众账号ID
        mch_id: config.mch_id, // 商户号
        nonce_str: getRandomString(32), // 随机字符串
        out_trade_no, // 商户订单号
        body, // 商品描述
        fee_type: 'CNY', // 标价币种RMB	
        total_fee: 1, // 标价金额（测试）1分
        notify_url: config.notify_url, // 通知地址
        trade_type: 'NATIVE' // 交易类型
    };
    // 生成签名
    const sign = getSign(_prepay);
    // 将发送的参数转化为xml
    const xml_prepay = getXml({
        ..._prepay,
        sign
    })
    // 调用微信支付的统一下单接口，获取连接参数code_url
    axios({
        url: config.unifiedorder,
        method: 'post',
        data: xml_prepay
    }).then(result => {
        // 将xml转化为js
        const code_url = getJs(result.data).code_url[0];
        // 引入二维码模块   qrcode
        // 链接生成二维码图片
        QRcode.toDataURL(code_url, (err, url) => {
            if (err) throw err;
            res.send({
                code: '200',
                message: '获取二维码',
                url
            })
        })
    })
});

module.exports = router;
